热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于CMS收集器的知识介绍和优缺点分析

本文介绍了CMS收集器的概念、运行过程和优缺点,并解释了垃圾回收器的作用和实践。CMS收集器是一种基于标记-清除算法的垃圾回收器,适用于互联网站和B/S系统等对响应速度和停顿时间有较高要求的应用。同时,还提供了其他垃圾回收器的参考资料。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了关于 CMS收集器相关的知识,希望对你有一定的参考价值。



文章目录


  • CMS收集器
    • 概念
    • 运行过程
    • 优缺点
      • 优点
      • 缺点

    • CMS收集器运行示意图



CMS收集器

概念

CMS收集器全称Concurrent Mark Sweep收集器

CMS(Concurrent Mark Sweep)收集器是一种获取最短回收停顿时间为目标的收集器,目前很大一部分的Java应用集中在互联网站或者B/S系统的服务端上,这类应用尤其重视服务的响应速度,希望系统停顿时间最短,以给用户带来较好的体验,CMS收集器就非常符合这类应用的需求。

CMS(Concurrent Mark Sweep)收集器是基于“标记-清除”算法实现的。



PS:上面是官话,听不懂吧,那来说明一下:



  • 首先我们要知道收集器是用来进行垃圾回收的

  • 如果说垃圾收集算法是内存回收的方法论,那垃圾收集器就是内存回收的实践者,也就是说垃圾收集器是实现那些垃圾回收算法的实际程序。

  • CMS知识这些实现的一种而已。

其他的垃圾回收器的介绍可以参考这佬的博文,俺不记了:
https://blog.csdn.net/qq_35165000/article/details/106732837


运行过程


  • 初始标记(CMS initial mark):初始标记仅仅只是标记一下GC Roots 能直接关联到的对象,速度很快。

  • 并发标记(CMS concurrent mark):并发标记阶段就是进行GC Roots Tracing的过程。从GC Roots的直接关联对象开始遍历整个对象图的过程,过程较长,单不需要停顿用户线程;

  • 重新标记(CMS remark):重新标记则是为了修正并发标记期间因用户程序继续运行而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段稍长一些,但远比并发标记的时间短。

  • 并发清除(CMS concurrent sweep):来清除死亡的对象。


优缺点


优点


  • 可以实现并发收集。
  • 垃圾回收时低停顿。

缺点


  • CMS收集器对CPU资源非常敏感,即占用大量的CPU资源

  • CMS收集器无法处理浮动垃圾,可能出现"Concurrent Mode Failure"失败导致另一次Full GC的产生。



    浮动垃圾是指在并发标记和并发清理阶段产生的新的垃圾对象,这部分对象如果逃脱了标记过程,就不能在当次垃圾手机过程中被回收,只好留待下一次GC时再清理掉。


  • 由于CMS收集器基于“标记-清除”算法实现的,收集结束后会有大量空间碎片产生


CMS收集器运行示意图


推荐阅读
  • 深入解析JVM垃圾收集器
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版,详细探讨了JVM中不同类型的垃圾收集器及其工作原理。通过介绍各种垃圾收集器的特性和应用场景,帮助读者更好地理解和优化JVM内存管理。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 深入理解Java中的volatile、内存屏障与CPU指令
    本文详细探讨了Java中volatile关键字的作用机制,以及其与内存屏障和CPU指令之间的关系。通过具体示例和专业解析,帮助读者更好地理解多线程编程中的同步问题。 ... [详细]
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
author-avatar
liangpengtao
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有